iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Modern Web

你應該要知道的CSS技巧:發掘被忽略但實用的屬性系列 第 6

【Day06】我現在就想要!一鍵輸入主題色即可切換Theme - CSS Variables + calc() + rgb()

  • 分享至 

  • xImage
  •  

CSS Variables + calc() + rgb()

CSS Variables支援度:Can I Use
calc()支援度:Can I Use
rgb()支援度:Can I Use

昨天了解到color-contrast()如何使用,但因為瀏覽器支援度問題,目前只能在safari特定版本以上才有效,
但是PM不會體諒你需求說來就來。
在我們殷殷期盼的color-contrast支援度提高以前,
我們還可以怎麼根據背景顏色,自動判斷文字色彩呢?

可以利用CSS Variables + calc() + rgb()搭配YIQ公式!

YIQ是什麼?

  • YIQ是將RGB顏色模型轉換成Y(亮度)、I、Q(色度)的方法
  • YIQ的公式如下:
    Y = 0.299R + 0.587G + 0.114B
    I = 0.596R - 0.274G - 0.322B
    Q = 0.211R - 0.523G + 0.312B
  • 根據公式我們就可以算出目前的背景色彩亮度,進而判斷背景中的文字應該呈現黑色還是白色
  • 更多介紹看這裡

作法如下:
監聽input並設定根元素--red--green--blue三個變數

const setRootProperties = ()=>{
      root.style.setProperty('--red',red.value);
      root.style.setProperty('--green',green.value);
      root.style.setProperty('--blue',blue.value); 
 }

CSS Variables設定,根據三原色變數產出背景顏色,文字顏色再根據YIQ公式產出,這樣就完成啦!

:root{
  --background-primary:rgb(var(--red),var(--green),var(--blue));
  /* 算出Y */
  --accessible-color:calc(
      (((var(--red) * 299 + var(--green) * 587 + var(--blue) * 114) / 1000) - 128) * -1000
  );
  --text-primary:rgb(var(--accessible-color),var(--accessible-color),var(--accessible-color));
}

Codepen範例

IT15-Day06-Create Variable UI with CSS Variables and YIQ

參考來源


上一篇
【Day05】一鍵輸入主題色即可切換Theme - CSS Variables + color-contrast()
下一篇
【Day07】快速改變表單預設色 - accent-color
系列文
你應該要知道的CSS技巧:發掘被忽略但實用的屬性30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言